23

» WarCraft 3 / Еще фатал после игры

Похожие вопросы:

ответ
фатал после игры может быть вызван
а) использованием malloc
б) копированием внутриигровых структур (например, структуру сплеша перенес от одного юнита другому, при чистке один раз адрес зачистился, а на втором проходе произошел краш)
в) неизвестным мне образом
ответ

Короче, это скорее всего вообще не из-за этого.
Наверное, тупо опять считывание силы атаки чудило: у доспеха ее не было, он фаталил при приближении к нему героя с аурой "жечь врагов в % от своей атаки + % от их атаки". Ща снова из-за этого апдейт перепиливаю.
Правда, не помню, был ли в той игре, кроме Матери-Земли, и этот вот другой герой... но пока остановимся на том, что у доспеха причина фатала была одна, если будет снова фаталить именно с доспехом - вернёмся к теме.

23

» WarCraft 3 / Продажа вещей

Похожие вопросы:

ответ
Steal nerves:
Тестил, тестил. Думал найду ошибку. Короче не знаю в чем дело, видимо и в правду баг. Решил по-другому. Ловить поставку, и ловить продажу. То есть ловить то, что пришло, и то, что ушло.
событием - "юнит закладывает в лавку" (EVENT_PLAYER_UNIT_PAWN_ITEM) ловим продажу итемов.
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)

событием - "юнит закладывает из лавки (продает артефакт)" (EVENT_PLAYER_UNIT_SELL_ITEM) ловим покупку итемов
GetSellingUnit()=GetTriggerUnit()=продающий торговец (обычно это магазин)
GetBuyingUnit() = покупающий торговец (наш герой получает артефакты)
Решил, я по-своему. Короче, видимо, итем в магазине исчезает при добавлении. Попробовал запоминать все добавленные итемы, и при добавлении я сначала удалю всё в магазине, а потом заново добавлю. Пришлось, еще порядок (номер слотов) запоминать, а то строятся ключи хэша на строгом порядке. Если возьму и заберу итем посередине, придется заново выстраивать порядок.
Не знаю, пока тестил много времени, пока без косяков. Главное, что работает. Меня это радует. Но пока не буду спешить. Мне бы хотелось затестить норм.

23

» WarCraft 3 / Как сделать способность, зависящую от статов?

Похожие вопросы:

ответ
Ну вписывать нужно в war3map.j 1 триггер, но карта не будет совместима с оригиналом для игры в сети.
ответ
SсRealm, есть 2 нейтральных (12 и 15) и 2 резервных(13 и 14) игрока
в доте 6-6 используются резервные для крипов сторон
для крипов в лесу используется 12 игрок
ответ
у меня просто нет слов
это не стол заказов
и точно не место для размещения своего скайпа
не говоря уже о том что вопрос поднимался в статьях раз 10 как минимум
ответ
Lana Guerrero:
Ребята, я разобрался
Триггер работает нормально и безутечно, вся проблема в том, что создавая спелл-активатор с кислотной бомбы, я указал интервал урона = 0.00, что и повлекло все лаги
ответ
вызов торнадо с длительностью 20 с
по истечению определенного времени назначать новые координаты юниту и паузить-анпаузить для прерывания каста

23

» WarCraft 3 / Массив отрядов

Принятый ответ
Похожие вопросы:

ответ
пичаль
перебираешь всех юнитов группы и заносиш их в массив
хотя бы весь список гуи команд выучите
и вопрос закрыть незабуть

23

» WarCraft 3 / Количество золота

Похожие вопросы:

ответ
Это делается в триггерах. В триггере "Иниц. сражения" за это отвечает действие "Режим сражения - Set starting resourses (for all players)". Просто удали это действие и стартовое количество ресурсов при запуске тогда будет равно нулю.
ответ
Roy Mustang:
Rally point может быть?
но мне кажется дело в том что ты должен был поставить не build а train
вот так
ответ
Steal nerves:
там ничего сложного нет. вопрос часто встречаемый в последнее время. Там периодически перебирают всех юнитов. В основном работа в группе. Многие неправильно работать в группе, забывают ее удалять.
Вариант 1 (общий вариант)
Событие - периодический таймер
действие - цикл перебираем всех игроков
действие - установить "группа DDD = выбрать всех юнитов в группу игрока" //я использовал такой необычный способ, чтобы группу запомнить в глобалку, также используй фильтр/условие, отсеивай не нужных юнитов (например, не здания)
действие - ForGroup (делать действие над каждым юнитом в группе DDD), и в зависимости от типа юнита складывай / прибавляй денежки игроку // if-ами придеться перебирать, если ...
группу не забываем удалять после работы с нею. Можно использовать также счетчики, и использовать заранее заготовленную группу, в нее будем добавлять и убавлять юнитов. при завершении постройки добавляй юнита в группу, при уничтожении удаляй из группы. И не нужно будет каждый раз пересоздавать группу и удалять.
Вариант 2
Событие - юнит вошел в зону
условие - юнит является зданием
события можно по-другому найти, так как вошел в зону не совсем точное, потому, что юнит вошел, то есть его только , что создали. Он в данный момент только строится
Событие - юнит завершает строительство
действие - if/then/else //короче длинные будут проверки типов, так как будут разные здания, и разные здания будут давать разные денежки
условие - тип юнита
действие - переменная + 1 // общий голд
когда здание уничтожают, убавляем голда
Событие - юнит умирает или покидает зону
условие - тип юнита
действие - переменная - 1
когда улучшают здание
Событие - юнит завершает улучшение
условие - тип юнита
действие - переменная + еще 1
начисляем периодически
Событие - Периодический таймер
действие - добавить голда
Вариант 3
далее предлагаю запоминать сколько дает данное здание. Можно использовать Custom Value / обычное значение юнита, в котором можно сохранить число. Число можно хранить у юнита, у каждого оно свое. В этом числе можно сохранить сколько оно денежек дает. Есть две функции SetCustomValue - установить число, и GetCustomValue - условие, определяющее сколько золота.
условие - тип юнита
действие - SetCustomValue
и потом периодически перебираем всех юнитов
Событие - Периодический таймер
действие - Выбрать всех юнитов в группу, и сделать действия. //перебирает каждого юнита, и добавляем столько, сколько GetCustomValue у юнита
Использовать хранения можно также хэш-таблицу. Ваше CustomValue может использоваться в других системах, и поэтому нужны еще где-то запоминать, а хэш-таблица самое то.Не забудь глобалку хэша создать, и создать хэш-таблицу в начале игры
Событие - Инициализация
Действие - Создать/инициализровать хэш-таблицу
Действие - установить глобалка = последняя созданная хэш-таблица
при сохранении используется так
CS: set udg_D=GetHandleId( ваш юнит) //целочисленное число, HandleId - номер объекта, необходим для дальнейшего
сохранить целочисленное число Integer 
Хэш-таблица - Сохранить целочисленное число, Id-хэндл, и ключ //там есть типа адрес и номер, адрес - как хэндл. номер - ключ, ключ вводишь любой 
при загрузке хэндла
CS: set udg_D=GetHandleId( ваш юнит) 
Хэш-таблица - Загрузить число по хэндлу, и ключу //ключ вводишь тот, который ввел при сохранении
Хэш-таблица используется точно также как и число у юнита, мы всех юнитов перебираем узнаем кол-во число, складываем и даем бабло. Также можно использовать классификацию юнита (можно триггерно дабавлять/удалять) xgm.guru/p/wc3/wc3targets
xgm.guru/p/100/179866 примерчик с логовом
xgm.guru/p/100/179159 примерчик с автокастом - ловишь приказ автокаста, время задаешь в перезарядке абилки и не нужно периодить таймером
+ количество этих золотодобывалок ограничено.
смотри в разделе игрок
Действие - Игрок - лимит на обучение данного типа (Limit training of type-unit to кол-во у Игрока)
ответ
Качаем систему ссыль и каждые 0.5 сек. проверяем кол-во золота у игрока и устанавливаем ему бонус урона, таймер и триггер следящий за смертью персонажа (нельзя модифицировать параметры мертвым) который включается при изучении умения.
ответ
зажми кнопку shift и лишь потом кликай по полю которое надо поменять
и пиши туда что хочешь
а вообще подобных вопросов овер дофига
учитесь использовать поиск

23

» WarCraft 3 / Хештаблица

Похожие вопросы:

ответ
Где это одно и то же?
Во внутреннем представлении (читай: "после отработки препроцессора JassHelper") любая структура есть набор массивов с индексом, по которому лежат данные именно этой структуры во всех связанных массивах. По факту, передавая структуру в качестве аргумента функции, ты передаёшь только её id из массива.

По поводу вопроса: полного перевода vJass мануала на русский язык не существует в природе, так что вот ссылка на английский: www.wc3c.net/vexorian/jasshelpermanual.html
Крайне рекомендую пользоваться не базовым синтаксисом, а C-подобным, который обеспечивает "AdicHelper" aka cJass (ссылка на русскую версию мануала), это позволит в будущем гораздо проще перейти к программированию на полноценных языках.
ответ
трудновато проверить, но раз сохраняешь и удаляешь, то какие вопросы? утечка - это только назначение в переменную.
ответ
можно
только вопрос
зачем?
и как в твоём представлении оно может работать не нормально?
ответ
orc01, есть событие EventUnitsInRange, делаешь триггер, а при постройки башни добавляешь в него это событие для каждой башни, в условиях проверяешь что тот кто подошел нужного тебе типа юнит, ну действия думаю проблем не вызовут...
ответ
Extremator:
а что насчёт хештаблиц? Скорость их работы?
всё крайне печально
лол что?
скорость работы глобалок в 1,5 раза быстрее чем у хештейблов
т.е. 10 обращений к хештейблам выполняется столько же времени сколько и 15 к глобалкам
если каждую секунду не выполняется более 1000 обращений к хештейблу то не юзать хэштейблы ради оптимизации та ещё тупость

23

» WarCraft 3 / Отлов цели приказа

Похожие вопросы:

ответ
Проблему решил сравнением переменных кастера и цели, если совпадают - задаю поиск в радиусе не от цели, а от кастера.
ответ
Diaboliko, у предметов с этим бага
юзай юнитов
с ними намного проще
ответ
ты знаешь начальные хп декораций
ты можешь отловить факт приказа добывать дерево и OrderTargetDestructable
ты можешь перезаписывать этот триггер каждый раз, как юнит получает новый приказ, хотя хз, как оно себя ведет при смене дерева
нормального способа задетектить урон по не-юнитам нет

23

» WarCraft 3 / Какой путь для иконки?

Похожие вопросы:

ответ
Нужна ДИСБТН-версия иконки и правильный путь. Можешь воспользоваться статьёй "Жутко неправильный импорт" или как-то так.
ответ
ответ
Просто оставлю это и это здесь
ответ
Пассивки в книге заклинаний работают, даже если запретить доступность самой книги для игрока.Так что да.
ответ
скопировать путь отсюда - дело 5 секунд

а так придется реимпортировать иконки в карту и писать им свой путь, в итоге вырастет вес
и никому это не нужно

23

» WarCraft 3 / Функция Atan2

Похожие вопросы:

ответ
SetUnitPosition довольно тяжелая операци, юзайте SetUnitX\Y в конце полета юзай SetUnitPosition для того чтобы юнит не залетел в непроходимое место.
Фильтр просто ужас, ну кто так фильтры делает?
Проверка на 'Aloc', я в ужасе на кой черт проверять на дамми если GropEnumUnitsInRange\Rect не выделяет москитов, тока EnumOfPlayer может пикнуть москитов, остальное не пикает их, на то они и москиты...
Вот как выглядит нормальный фильтр без локалок и прочего
function EnemyFilter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction
UnitDamageTargetEx - красиво но нафиг ненужно обводить в отдельную функцию с тучей аргументов + жутко неудобно, 100500 аргументов у функции и фиг знает за что какой от вечает, прямо так UnitDamageTarget, без отдельной функции.
Туча констант, тоже хорошо тока длят наработок, на деле ставь конкретные значения или юзай Difine vjass'a.
ответ
nvc123:
Bornikkeny, сделал специально чтобы доказать тебе что ты несёшь бред
даже 2 скрина приложил
думаю закинуть библиотеки сможешь сам (в папку *твой jngp*\AdicHelper\lib)
Хорошо группы реализуешь как альтернативу unit[array]. Я тоже самое получил.
nvc123, и всё же твой хук не тот что мне нужен.
Я решил проблему, спасибо что дал идею обрабатывать движение внутри структуры, а не в стеке.
кот
library Hook initializer Init_Hook uses LibMath

globals
    mhook   ahook[100]
    integer ihook = -1
endglobals
    
struct mhook
        unit       host = null
        unit       target = null
        real       face = 0
        real       speed = 0
        real       dis = 0
        real       dismax = 0
        integer    chaini = 0
        unit       chain[50]
        real       scale = 0
        integer    move = 1
        integer    i = 0
		
		
        static method Create takes unit host, real tx, real ty, real scale returns mhook
        local mhook h = mhook.create()
        local integer i = GetPlayerId(GetOwningPlayer(host))
        local real x = GetUnitX(host)
        local real y = GetUnitY(host)
        local real f = GetAngleXY(x,y,tx,ty)
            set h.host = host
            set h.face = f
            set h.speed = 600
            set h.dismax = 1400
            set h.scale = scale
            set h.chain[0] = CreateUnit(Player(i),'h007',GetPolarX(GetUnitX(host),f,h.scale/2),GetPolarY(GetUnitY(host),f,h.scale/2),f)
            set h.i = i
            call UnitAddAbility(h.chain[0],'Amrf')
            call UnitAddAbility(h.chain[0],'Amrf')
            call SetUnitFlyHeight(h.chain[0],50,0)
            call SetUnitPathing(h.chain[0],false)
            return h
        endmethod
        
        method Start takes nothing returns boolean
            if ihook < 1000 then  
                set ihook = ihook + 1
                set ahook[ihook] = this
                return true
            else
                return false
            endif
        endmethod
        
        method Destroy takes nothing returns nothing
        local integer i = 0
            loop
            exitwhen i > ihook
                if ahook[i] == this then
                    set ahook[i] = ahook[ihook]
                    set ahook[ihook] = 0
                    set ihook = ihook - 1
                    set i = ihook // выход из цикла
                endif
            set i = i + 1
            endloop
            set this.target = null
            set this.host = null
            call this.destroy()
        endmethod
        
        method Move takes nothing returns nothing
        local integer i1 = 0
        local integer l = 0
        local real x
        local real y
        local real xh
        local real yh
        local real f
            if move == 1
                set dis = dis + speed*0.025
                loop
                 exitwhen i1 > .chaini
                    set x = GetUnitX(.chain[i1])
                    set y = GetUnitY(.chain[i1])
                    if i1 > 0 then
                        set f = GetAngleXY(x,y,GetUnitX(.chain[i1-1]),GetUnitY(.chain[i1-1]))
                        call SetUnitX(.chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(.chain[i1],GetPolarY(y,f,.speed*0.025))
                    else    
                        set f = face
                        call SetUnitX(chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(chain[i1],GetPolarY(y,f,.speed*0.025))
                    endif
                    call SetUnitFacing(chain[i1],f)
                 set i1 = i1 + 1
                endloop
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set f = GetAngleXY(GetUnitX(.host),GetUnitY(.host),x,y)
                set xh = GetPolarX(GetUnitX(.host),f,.scale/2)
                set yh = GetPolarY(GetUnitY(.host),f,.scale/2)
                //Create==================
                
                if GetDisXY(xh,yh,x,y) >= .scale/2 then
                    set chaini = chaini + 1
                    set chain[chaini] = CreateUnit(Player(.i),'h007',xh,yh,f)
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call SetUnitFlyHeight(.chain[.chaini],50,0)
                endif
                if dis > dismax then
                    set move = 0
                endif
            else
                //REVERSE=============
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                set chain[chaini+1] = host
                loop
                exitwhen l > chaini
                        set x = GetUnitX(chain[l])
                        set y = GetUnitY(chain[l])
                        //if chain[chaini] == null then
                        //    set f = GetAngleXY()
                        //endif
                        set f = GetAngleXY(x,y,GetUnitX(chain[l+1]),GetUnitY(chain[l+1]))
                        call SetUnitX(chain[l],GetPolarX(x,f,speed*0.025))
                        call SetUnitY(chain[l],GetPolarY(y,f,speed*0.025))
                        call SetUnitFacing(chain[l],f-180)
                set l = l + 1
                endloop
                //Destroy==================
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                if GetDisXY(GetUnitX(chain[chaini]),GetUnitY(chain[chaini]),GetUnitX(host),GetUnitY(host)) < 100 then
                    call RemoveUnit(chain[chaini])
                    set chain[chaini] = null
                    set chaini = chaini - 1
                    if chaini == -1 then
                        call .Destroy()
                    endif
                endif
            endif
        endmethod
        
endstruct

private function Engine takes nothing returns nothing
local integer i = 0
local mhook h
local group g
local unit t 
    loop
    exitwhen i > ihook
        if ahook[i] != 0 then
            set h = ahook[i]
            //--run--//
            call h.Move()
        else
            set ahook[i] = ahook[ihook]
            set ahook[ihook] = 0
            set ihook = ihook - 1
            set i = i - 1 
        endif
    set i = i + 1
    endloop
    //call DestroyGroup(g)
    set g = null
    set t = null
endfunction

function Trig_HookC_Bool takes nothing returns boolean
    if GetSpellAbilityId() == 'A01D' then //Способность Мясной хук
        return true
    else
        return false
    endif
endfunction

function Trig_HookC_Actions takes nothing returns nothing
local mhook h
    set h = mhook.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY(),110)
    call h.Start()
endfunction

function Init_Hook takes nothing returns nothing
local trigger t = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( t, function Trig_HookC_Actions )
    call TriggerAddCondition(t,function Trig_HookC_Bool)
    call TimerStart(CreateTimer(),0.025,true,function Engine)
endfunction

endlibrary
ответ
Всё, разобрался, вопрос снимаю)

23

» WarCraft 3 / Операции сравнения

Похожие вопросы:

ответ
спасибо всем, подали пару идей. буду работать
ответ
Примерно так, только вместо класса - тип предмета.
Событие - Юнит получает предмет.
Ну и можно кинуть предмет не из слота, а подобранный.
ответ
еще можно дать нужным юнитам абилку без иконки (например предметную +0 атаки) и проверять что она у них есть
ответ
Roy Mustang:
ответ
любой штатный способ быстрее любого велосипеда. группа будет быстрее перебора массива юнитов. переменная лучше, чем постоянные GetFilterUnit()
если дашь мне код в чистом жассе, я могу прямо в лайве замеры сделать

23

» WarCraft 3 / Функции

Похожие вопросы:

ответ
скачай этот файл и закинь его в папку AdicHelper\lib\ в папке с jngp
после в шапке карты напиши include "ifdebug.j"
и создай триггер с событием
игрок написал в чат ifdebug как точное совпадение
действие
кастом скрипт log()
после чего запусти карту и напиши в чат ifdebug
он выведет на экран все if/else/elseif через которые он прошёл (true в скобках в конце строки означает что значение в ифе истина)
ответ
Скачай новую версию TESH с HIVE, удали папку tesh в папке JNPG, вместо неё распакуй туда скачанную. В блокноте пишешь свои функции, сохраняешь в папку tesh\includes. Если в это время открыт редактор, то в меню Trigger Editor кликаешь TESH -> Reload user includes, и твои функции начинают подсвечиваться. Формат подсветки можно настроить в Options, что над рабочей областью редактора.
ответ
Steal nerves:
только этот триггерный урон может не блокировать некоторые защитные физические способности.
weapontype weaponType - звук оружия
ответ
Аргументы функций не обязательно обнулять
Steal nerves:
нет, не нужно. это аргументы (это тоже локалки), говорят, что обнуляется само по завершению функции. А то что объявляем через local надо обнулять. строки вообще не обязательно обнулять (хоть не шарю в этом программировании, но обнулять не нужно). Уже многие пишут не надо строки обнулять, и аргументы. Можешь поискать.
Нужно обнулять только те локалки, которые указывают на игровой обьект.

23

» WarCraft 3 / Автокаст на здания

Похожие вопросы:

ответ
Steal nerves:
ограничить число найма можно, есть спец. функции. Поищи в действии в вкладке игрок, установить (макс. геои)
лимит на определенный тип. лень искать. это уже было поищи в интернете
удалить и добавить можно триггерно. В разделе нейтральное здание. Есть одно условие, что если в РО изначально выставлен на продажу, то триггерно не удалишь, и не поменяешь. Нужно триггерно добавлять.
еще можно скрыть героя у данного игрока, не помню есть ли такая функция. Это наподобие как у абилок, видит один игрок, в то время другой вообще не видит. Просто есть продажа, а есть найм. не путать.
короче удаляешь и подменяешь новым и все
ответ
8gabriel8, стандартные порталы как раз включаются триггером, так же триггерно им можно назначать области телепорта, так же они не ломают карту путей.
Насчет упираются в здание, карту путей ставь от портала, физ размер в 0.

23

» WarCraft 3 / Предметы

Похожие вопросы:

ответ
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
ответ
Melissa:
а какая способность у этого предмета?
Разобрался с этой проблемой.
ответ
Делаешь способность пустышку на основе "Канал", далее делаешь триггер с событием "Юнит начал направлять способность" в условиях ставишь
свою способность, а в действиях условиями на наличие предметов делаешь крафт. Всё что я тут написал - это отсылка к темам которые можно самому найти.
ответ
Итак, вроде получилось!
1.Создаём шесть активных предметных способностей не делающих ничего, но имеющих долгую перезарядку.
2.Создаём шесть предметов, которым указываем каждому свою из предыдущих способностей в поля "B) Способности - Способности (iabi)" и "F) Характеристики -Название (icid)".
3.Для сброса перезарядки предметов на герое последовательно даём и запускаем герою все шесть предметов.
4.Не забываем о перезрядке самого предмета - заменяем на новую копию.
5.Теоретически (не пробовал) при использовании очень долгих периодов может быть достаточно использовать героем по разу пять предметов с кд скажем двое суток, а потом для очистки героя от кд предметов запускать только один предмет с кд сутки.
Критически помогли:
DracoL1ch:
и
nvc123:
Sebra2, потестил
у предмета есть поле cooldownId
на русском называется характеристики - название (не путать с Текст - название где задаётся название предмета)
у тех предметов у которых это поле совпадает один кулдаун
Большое СПАСИБО!
пы сы, Надеюсь, выбрав свой ответ как лучший, не украду ни у кого "опыт".

23

» WarCraft 3 / Повышение уровня способности триггерно

Похожие вопросы:

ответ
И в правду рак мозга...
Статьи почитать не судьба? Некоторые предметные способности не повышают уровень - точнее эффект от повышения уровня не изменяется, посему делают 5 (100500) способностей с разными бонусами и выдаются юниту в нужный момент.
Способность маски соби - повышает базовый реген маны и бонус от интеллекта, так что крипам с 0 манарегена эта способность ничего не добавит.

23

» WarCraft 3 / Странные ошибки

Похожие вопросы:

ответ
одной константе нельзя присваивать значение другой константы
у тебя скорее всего был включен vjass optimizer, который подставлял на этапе компиляции
юзай #define вместо констант, они 100% препроцессор
ответ
Audes, обработчик таймера должен быть статичной функцией и соотвественно в них нельзя использовать this. Учи матчасть.
ответ
там 2 баффа, для ближнего и дальнего боя. Ты поменял 1 из баффов, а другой не поменял, все дела.
Просто можно откопировать его в строке баффов и написать 2 раза.
ответ
Было создано 22 366 679 экземпляров класса CUnitListNode, которые заняли 255.9 МБ памяти.
При очередной попытке выделения, игра упала.
Виной всему утечки памяти: за 21 минуту набралось 80 тысяч групп и 20 тысяч точек.
Также, из-за выполнения большого количества кода, сильно лагает.
На стадии выбора героя (первые две минуты), выполняется 550 000 операций в секунду, а далее — 1 200 000.
Для сравнения: лимит потока — 300 000 операций.
Хорошо, что ты приложил карту, так как в логе маловато информации.
ответ
Ошибка перестала существовать после перезапуска редактора. Мда.

23

» WarCraft 3 / Нестандартный проклятый рудник в ИИ не строится

Похожие вопросы:

ответ
Через что уничтожаешь? Если через килл, то конечно умирает и нейтральный.
  1. Если наносить от какого-то даммика урон в мильены, то не умрет нейтральный.
  2. Можно от даммика развеяние нежити за 0.01 сек.
  3. Заменять можно, внося значение золота в переменную и потом, создавая новый рудник, ставить количество золота в него из переменной, благо это даже в ГУИ реализовано.
ответ
Верни стандартную функцию создания стартовых юнитов, поставь игровую паузу, замени всех юнитов на свои аналоги, возобнови игру (я так же дополнительно прячу всех юнитов на этот период). Не забудь удалить все проклятые/оплетённые рудники, если нужно. Чтобы заново оплести рудник после замены юнитов (если заменял древа жизни), используй триггер "Боевая единица - (приказ без цели) Оплести ближайший рудник" (перед оплетением поставь паузу 0.1 секунды чтобы после удаления успел заново появится оригинальный рудник).

23

» WarCraft 3 / Древа

Похожие вопросы:

ответ
Иллидиан, вот тебе пример работи с древом жизни.
В нем я сначала витаскиваю древо с земли и сразу спецально его сажу в землю и приказиваю немедленно оплести рудник, после через n секунд я его витаскиваю и приказиваю идти в другое место и через n секунд его сажаю в землю. Все работает без проблем, древо послушное как раб.
P.S. Не забудь закрить вопрос.
ответ
Пример Jass:
// native SetDoodadAnimationRect   takes rect r, integer doodadID, string animName, boolean animRandom returns nothing

call SetDoodadAnimationRect( gg_rct_VarName, 'D000', "stand lumber", false )
Пример GUI:
Посадить можно, лучше используй на основе грибов вид декорации "Окружение". Ну это, чтобы посадить светляков куда надо.
ответ
Goroshek:
а можно ли как нибудь такую модель сделать ?
Да. Статьи вроде этой тебе в помощь.
ответ
Это модель эффекта-крепления с несколькими анимациями, и она ссылается на теги upgrade+числительное буквами, когда надо отобразить.
ответ
~8gabriel8:
Открываешь доту, выбираешь путь сохранения в Сохранить как, жмёшь Восстановить. Правда, не факт, что всё нормально восстановиться и будет работать, как надо. Попробовал сейчас доту восстановить, но чего-то не хочет она загружаться в редакторе. Войск почти нет, редактор страшно тормозит. Наверное, как-то иначе её надо взламывать. Если что, на сайте wc3-maps были взломанные доты.

23

» WarCraft 3 / Молнии

Похожие вопросы:

ответ
Карта с нестандартными молниями и описанием. Смотреть Readme в менеджере импорта.
Если тебе типа фиолетовой молнии рубика надо, то вот есть вроде этого
В эффектах молнии пишешь PISU
В менеджере импорта путь splats\lightningdata.slk
ответ
Ну цепь молний можно прилепить, в сферу замедления засунуть обычную цепную молнию.
Ну а так, разумеется без триггеров низя. эффект молний это такой спрайт от цели до цели, а не 3д снаряд, поэтому там где молния не придусмотренна так сделать нельзя.
Насчет наработок - детект физического урона + библиотека для движения молний ( забыл как называется), нл суть в том что это достаточно сложно и на jass, для новичков эту тему лучше не трогать а ограничится стандартными способностями.
ответ
ну вокруг цели пикаешь всех врагов в группу, саму цель сразу из нее исключаешь, выбираешь случайного нового врага из группы на расстоянии перескока молнии от последнего пораженного, бьешь его следующей молнией и удаляешь из группы, ну и повторять так, сколько надо отскоков или пока группа не будет пустой.
новые молнии можно просто даммикастить

23

» WarCraft 3 / Снова эти функции

Похожие вопросы:

ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
ответ
Steal nerves:
ограничить число найма можно, есть спец. функции. Поищи в действии в вкладке игрок, установить (макс. геои)
лимит на определенный тип. лень искать. это уже было поищи в интернете
удалить и добавить можно триггерно. В разделе нейтральное здание. Есть одно условие, что если в РО изначально выставлен на продажу, то триггерно не удалишь, и не поменяешь. Нужно триггерно добавлять.
еще можно скрыть героя у данного игрока, не помню есть ли такая функция. Это наподобие как у абилок, видит один игрок, в то время другой вообще не видит. Просто есть продажа, а есть найм. не путать.
короче удаляешь и подменяешь новым и все
ответ
ALL_Remove = false
чтотооченьважное
ALL_Remove = true
как сложно то было

23

» WarCraft 3 / Поясните функцию

Похожие вопросы:

ответ
ledoed, давно не обращал внимание на мой вопрос не закрытый решил написать ledoed, ты меня все равно не понял ну тут моя вина все способности которые я пишу не как не связаны с стандартными только если как пустышка . Допустим есть предмет который позволяет нанести крит урон но внутри этого предмета нету не каких способностей я просто привязываю к предмету триггер со скилом (крита ) и если при атаке у юнита есть предмет этот то с шансом N срабатывает функция триггера
ответ
Имена бж функций есть в..blizzard.j, чтобы они не конфликтовали с вашими способностями - чекайте софтом код абилок и близард ж файл, на предмет одинаковых имен и правьте, а так еще советую тулы векса или хеави лок - они сжимают имена и небудет проблем с именами функций и переменных в скрипте.

23

» WarCraft 3 / Проблемы с новым JNGP

Похожие вопросы:

ответ
Steal nerves:
Короче порылся в ХГМ, потыкал, все испробывал, и сам нашел ответ, вот несколько моментов для того, чтобы заработал:
  1. Требуется установленный Warcraft 3: The Frozen Throne последней версии 1.26a. Скачайте нормальный варкрафт 3, а то попадаются урезанные или нерабочие версии. Лучше оригинальную версии приобрести, и обновить. Хотя пиратки тоже неплохи. Вот использую сборкой от R.G. Mechanics
  2. Путь к программе НЕ ДОЛЖЕН содержать русских символов
  3. Совершайте установку в отдельную от Warcraft 3 папку
  4. Рекомендуется приостановить антивирусные программы до установки, потом выполнить установку, затем добавить папку c JNGP в исключения, и потом только снова включить антивирусы. Эта программа вторгается в процесс worldedit.exe, поэтому может считаться вредоносной
  5. Не трогайте файл worldedit121.exe, он должен быть и в папке игры и в папке JNGP
  6. Сначала "Сохранить карту", только потом "Проверка карты", а ещё иногда бывает лучше сохранять пару раз
Выше, это стандартное описание для работы. Если не сработает, пробуем вот, что:
  1. Выставляем оптимальные настройки к JNGP, указанные на скрине (см. ссылку) xgm.guru/forum/showthread.php?t=13118 Обычно, эти настройки должны быть изначально после установки JNGP (ну мало ли пригодятся)
Теперь суть моей проблемы (не знаю, что из этих ниже пунктов сработало, но сработало):
  1. Я установил игру и JNGP на рабочий стол. Потому что на диске С, в папках типа Program Files.(x86) и др. блокирует браундмер. Обычно требует назойливо для работы права администратора, очень раздражает. Но сомневаюсь, что заработало из-за этого. Раньше не мешало нисколько.
  2. Запустить JNGP в режим совместимости. Заходим в свойство exe-шника. Поставил семерку.
  3. Если UMS изначально включен, то выключить его и включить (Enable UMS). Потом перезапустить WE. Скорее всего из-за него.
Из-за UMS также бывают ошибки: могут выскачить 2-3 окна : что отсутствует TriggerClearActions и layerAll. Когда пропускаешь эти окна, просто нажав на ок, затем появляется ошибка с памятью и уже потом закрывается редактор. Происходят такие ошибки, если пытаешься открыть обычным редактором карту, отредактированную в JNGP. Такая ошибка происходит, если некорректно настроен UMS (выкл. потом вкл.). Такая ошибка происходит, если открыть обычным редактором взломанную карту, которая наверняка сделана в UMS и использует необычный jass и прочие преимущества JNGP. Ошибки с UMS могут иногда происходить, поэтому скорее всего пункт 10 поможет
  1. Если UMS перестает работать (некорректно работает), а 10 пункт не помогает. То есть плагин UMS по каким-то причинам не запускается, а JNGP стоит галочка напротив UMS (говорит, что включен). Короче узнать, что он запущен, можно при открытий редактора вместо стандартного окна выскакивает окно UMS. Если не выскакивает, надо попробовать завести снова работать. Плагин может по каким-то причинам сломаться (один раз баловался в настройках JNGP). Пробуйте потом удалить JNGP и потом заново переустановить. Или выкл. и вкл, UMS затем выйти из jngp, удалить и заново переустановить
пп

23

» WarCraft 3 / Анимации

Похожие вопросы:

ответ
Ладно будем надеяться что кто-то что-то придумает.
ответ
попробуй в war3modeleditor - расчитать границы
ответ
скорее всего вершины не пересвязал...
ответ
XGM Bot:
Похожие вопросы:

ответ
Там есть способность у ящерицы - Электрическая атака (это такой орб эффект, который прикрепляет анимацию молнии )
ответ
Убрать звуки моделям в War3ME или вместо анимаций прятать юнитов (Unit - Hide).
Steal nerves, добавлю: чтобы сделать их бессмертными и невыбираемыми, можно дать способность "Москиты". Тень убирается в РО.
ответ
В РО, такое невозможно сделать. Подробно на триггерах? Ну вот пример, а если нужно ещё подробнее, то учебник по Jass в руки.
На проклятие в РО,или любой другой спелл,ставится минимальная дистанция
function Trig_Spell_Actions takes nothing returns nothing
local location loc = Location(GetWidgetX(GetSpellAbilityUnit()),GetWidgetY(GetSpellAbilityUnit()))
local unit u = null
if GetSpellAbilityId() == 'АЙ ДИ СКИЛЛА' then
set u = CreateUnitAtLoc(GetOwningPlayer(GetSpellAbilityUnit()),'АЙ ДИ ДАММИ ЮНИТА-ЭФФЕКТА',loc,0.00)
call IssueTargetOrder(u,"curse",GetSpellTargetUnit())
endif
call RemoveLocation(loc)
set loc = null
endfunction

//===========================================================================
function InitTrig_Spell takes nothing returns nothing
    local integer i = 0
    set gg_trg_Spell = CreateTrigger()
    loop 
    exitwhen i > 12
        call TriggerRegisterPlayerUnitEvent(gg_trg_Spell, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    set i = i + 1
    endloop
    call TriggerAddAction( gg_trg_Spell , function Trig_Spell_Actions )
endfunction
Потом тоже самое, только отследить каст проклятия, проверить тип юнита и удалить его из игры.
ответ
Морф в другого героя, а так же сферу чародея крови (она вроде не сбивает другие орбы, но сбивается другими орбами)
ответ
Либо пассивка вивера из доты (это вам описали как сделать, изи скилл из РО), либо триггерно!
Третьего не дано!


23

» WarCraft 3 / Не работает

Похожие вопросы:

ответ
Потому что вы блокируете мультишот. Запрет спеллбука не запрещает способности, находящиеся в нем. Но запрет самих способностей, внезапно, запрещает их.
ответ
ScopteRectuS, Я решил проблему там баг, если указать регион как точку назначения портала, то с ним триггеры перестают работать. Я просто указал другой регион.
biridius, Ну это альфа версия, за 5 мин сделал, знаю об утечках.
ответ
Сделал так. Использую только MoveLocation..., можно даже вообще не удалять переменную точки а лишь двигать её, как курсор мыши, и указывать молниеносно и невидимо для всех триггеров одной точкой что и куда им делать. Все стрелы полетели как надо, в россыпь. Хотя когда Я делаю удаление точки в конце, это не отражается на следующем вызове триггера, так что можно и удалять, главное не удалять когда она ещё нужна до завершения триггера. Проверил на Хендлах, один Хендл создаётся один раз, чтобы объявить эту точку, а то что двигаю в цикле никак не прибавляет Хендлы. Получилась точка-указатель, как курсор мыши, и одной хватает, ведь Warcraft однопоточный. Оставлю ещё вопрос открытым на несколько часов, может Я не прав и кто-то меня поправит.
ответ
BlackSite43 Запихни ее на диск D какой-нибудь, и название если русское то тоже измени.

23

» WarCraft 3 / Анимация постройки

Похожие вопросы:

ответ
Возможно, в анимации "birth" в модели этого здания также через пробел написано "portrait". Убери слово "portrait" в анимации "birth" и добавь его в анимации "stand" или создай отдельную анимацию "portrait". Также косяк может быть в самой анимации "portrait", если косяк там, то опять же придётся добавить через пробел слово "portrait" к анимации "stand" или вручную создать новую анимацию "portrait", скопировав ключевые кадры из "stand", чтобы не париться.
ответ
Astra:
Скорее всего в триггере стоит локальный игрок красного цвета. Скрин в студию
Во время инициализации карты в стартовой позиции игрока создается 1 висп.
Заменил триггер на другой, все заработало.
molot39:
Может проще будет после постройки здания сделать reset animation - на trigger unit
Увы, не работает.
Одним словом, я просто взял модель виспа, удалил у него все анимации, кроме stand, импортировал в карту, прописав путь к файлу, как к файлу модели оригинального виспа.
ответ
Это код аттачмента в модели.
Добавлять надо свой через war3modeleditor, и там указывать нужные пути и видимость (т.е. в каком диапазоне кадров этот аттач видно)
Вот охотничий зал, аттач BirthLink
Видимость у него включается (1) в кадре 3333, когда начинается анимация birth, и выключается (0) в кадре 63333 где она заканчивается
ответ
всмысле что? анимировать, лять!
вперед, на мины

23

» WarCraft 3 / Создание триггерных иллюзий

Похожие вопросы:

ответ
О, спасибо, столько накидали)
Разобрался кстати, почему не захватывало на суммонед - иллюзия не сразу создается, нужен вейт ~0.2 сек.
Melissa:
Вызывает боевую единицу.
Тип вызванной = тип вызывающего
^ отлов иллюзии, если цель сам воин
А не легче, Target unit of ability being cast равно Casting unit в условиях?
Melissa:

Триггерно иллюзию ведь не создать (для Last created unit)
дать руну со способностью жезла иллюзий ему
Я имел ввиду триггерно создать иллюзию через CreateUnit, т.е. полностью триггером, без любых способностей.
quq_CCCP:
Почему это нет, Event_Unit_Summon и Summoned unit (событие именно конкретный юнит вызвал), так же EventUnitInRect (входит в область) и условие IsUnitIllusion И проверяем на бафф от жезла иллюзий у иллюзии (GetUnitAbilityLevel( u, 'B000') > 0)
А как в первом и втором способе исключить жезл иллюзий? Вторичные действия способности подразумевают именно иллюзию от использования способности.
Т.е. все способы окольные, печально.
ответ
Где-то я видел наработку с этими хр барами.
Найдётся в ресурсах пользователя JesusHipster.